The ideal solution would be, in effect, a hybrid of swap and caching.
Here's how I envisage it working - Windows, when idle, would copy (not swap) pages from RAM to disk, effectively creating a swapped page which is pre-cached in RAM for next use.
Then, if those pages are needed again in the near future, you don't have to wait for them to be swapped back from disk and, if the pages were written to, Windows would delete the disk copies and mark the pages for re-copying next time it was idle.
If, on the other hand, Windows received a program request for more RAM than was free, it would free up RAM by trashing the RAM copies of the least recently used pages, which should already have been copied to the swap file. In caching terms, it would eliminate the least recently used data from the cache.
I don't know if this is how it works, but it is, to me, the logical solution.
As a refinement, Windows could allow programs to request that certain pages not be removed from RAM. For example, a game might do this with graphics textures that it has preloaded, knowing they are likely to be required in the next room. Again, it wouldn't surprise me if this has already been implemented.