I don't think permissions caching is really worth it with the
changes Don made (typical times for a perm check are on the order of a few ms) and getting it right is pretty hard
since a lot of group manipulation does not go through a
tcl api.
Caching read for public probably does make sense though; Don talked about doing this but I don't know if there
is any code anywhere for it.
And yes, you should use the permissions view in the subsites/packages query rather than issuing queries after the fact.