This works fairly well, but once I add the solution to a question, it pushes the following question question downward, often overflowing it to the next page. Is there a way to split the page in fixed regions so that Q2 remains fixed in position even if the solution to Q1 gets large?
The easiest solution would be to use the hide function, then when you want to export with the solutions enabled just remove the function call. You can even export a version with & without solutions pretty painlessly this way using the bundle feature and some simple programming.
If you want the layout to remain fixed even when you add more content, you can try using grid. However, a grid cell can still overflow. A more complex solution might use measure and layout to prevent this.
if you replace v(5.25cm) (there’s a unit missing in your post, btw) by block(height: 5.25cm)[...] you can add the content you want (as long as it fits) without changing the available space.
Just always having the content there but hiding it, like @aarnent said, is another option to prevent shifting.
Btw, there are a couple of packages and templates that can help with showing solutions, see e.g. this Universe search. Maybe there is something among them that helps you!