See:
http://forum.compass-project.org/thread.jspa?threadID=215502&tstart=0
Lucene's FieldCache uses an IndexReader as the key. Since Compass creates a new MultiReader for each transaction, the FieldCache becomes useless, slowing down sorted queries.
One solution is to cache MultiReaders. Another would be to implement equals and hashCode on the MultiReader that is based on the IndexReaders that it contains. That would allow new instances of MultiReaders to be created. I don't know the internals of Lucene well enough to know if this is safe, but it might be worth looking into, since it would be much easier to implement.