There are applications that create and delete a lot of temporary tables. Currently PostgreSQL doesn't handle such a use case well. Consider the following benchmark/example.
FWIW, I and Pavel have been spending some time discussing global temporary tables, and I have been taking a shot at it. This is pretty inline with that.
The approach you suggest sounds fine. I am personally a tad concerned about the extra overhead of the locks and sanity of concurrency for the in memory cache as well. Something I am not too clear about (I need to read your email again), is about cache invalidation. Do all pages stay in the memory always?
Also, are you proposing to change the behaviour of syscaches to not write out those pages to disk? Or do you create a new set of caches?