[...] the developers will find a way to increase memory usage to compensate, perhaps by having to remember the entire memory state of each paused tab or some such.
As opposed to the current system where running tabs DON'T remember the entire memory state?
I'm not sure what variable types you're thinking of, but this seems to simply be the difference between executing the next instruction or waiting at the current position. Neither affects memory.
A possible way to implement something akin to this, if tabs did run in separate processes, would be to idle the processes that aren't the active tab. They'd still run, if necessary, but it would be at a lower priority than any normal process (including the active tab).