Note: I started writing an answer but further testing showed that it does not work as well as I had hoped. Here it is anyway. Maybe it can help you going further.
VS has the notion of storing different layouts, based on what the developer is doing. While debugging, windows can be positioned differently than during "normal" editing. Start debugging and windows move/show/hide in order to be in the same position as the last debugging session. Stop debugging and the windows move back to the state before debugging.
I guess you knew this already, but what's great is that you can add new layouts yourself.
If you open the macro editor (Alt-F11), you'll see a samples project, which has a 'Utilities' file. There, you'll find 2 macros, SaveView and LoadView, which save and load the current window configurations. Each one asks for the view name.
I tried creating a new layout/view, hiding windows and moving them and then re-loading the view. It worked great.
You could change the macros to load or save a view by solution name. Or have one pair for editing and one pair for debugging. If you write an add-in, you can get notified of a solution load, but I don't know if you can detect the starting of a debug session.
What is not so great is that if you leave VS and re-launch it, loading a previously-saved layout does not work very well (e.g. some tool windows don't come back to where they were). Maybe it's worth studying the underlying class (WindowConfiguration), but it's not an easy solution.