After spending the day on this, I think I've come up with a way to do virtually limitless terms for facets. Instead of issuing a query per facet term and searching through all of the facet terms for the index regardless whether they are in the baseQuery or not, I just issue the baseQuery with a custom Lucene Collector. Doing this allows us direct access to the terms (and counts) associated with that query.
Using the freedb database (3.1 million records) and an index on genre and year, I can perform a full counting facet on both the genre (48,000 terms) and year (1200 terms) in 1.2 seconds after warmup.
I have also added support for limiting the number of returned FacetValues with a MaxResults field Facet document, and I return all terms that match the query as well. There is also a sort mode added that allows you to decide what "MaxResults" facet values to return (sort by term ASC, term DESC, number of hits ASC, number of hits DESC).
I still have some more checking to do before submitting a pull request, but this commit is the bulk of it.
mike