Maneira mais rápida de obter valores distintos do Lucene Query

Atualmente eu faço assim:

IndexSearcher searcher = new IndexSearcher(lucenePath);
Hits hits = searcher.Search(query);
Document doc;
List<string> companyNames = new List<string>();

for (int i = 0; i < hits.Length(); i++)
{
    doc = hits.Doc(i);
    companyNames.Add(doc.Get("companyName"));
}
searcher.Close();

companyNames = companyNames.Distinct<string>().Skip(offSet ?? 0).ToList();
return companyNames.Take(count??companyNames.Count()).ToList();

Como você pode ver, primeiro coleciono TODOS os campos (vários milhares) e depois os distinto, possivelmente pulo alguns e removo algun

Sinto que deveria haver uma maneira melhor de fazer iss

questionAnswers(4)

yourAnswerToTheQuestion