Solution 1:

Microsofts own PowerToys (i.e. FancyZones) can be used to tweak the Snap behaviour and achieve exactly what was requested.

Solution 2:

What you are looking for is called Tiling Window Manager

There are number of examples on that Wikipedia page. Perhaps a better list can be found here.

Can't recommend a specific one, as I am the developer for one of them, and, obviously, biased :-D