Currently, cached queries & query results are stored in private variables, which can quickly use up the Apex heap size. Platform cache should be used - either as a configurable secondary option, or as a complete replacement for the current approach.
This should also provide a way to leverage both org & session-level caching.