Multiple sites in separate application pools are the only way to guarantee isolation. Anything else means there is a possibility that a piece of code in one application may be able to reach into another application's data. Cache is just one of many things that has to be shared.
It is however an expensive option: memory footprint is going to be more important, and you are going to have n applications to start, with the implied overhead for each one.
If you use multi-tenancy, there is only one application to start, and the memory footprint grows with the number of sites in a much more reasonable way (the footprint of an additional site is much smaller than the footprint of the first site). Each of the applications is also going to keep all of the others alive with each hit.
Multi-tenancy scales much better. Hosting thousands of sites on a single server is a possibility.