I'll leave it to others to analyze the code, and ask something completely different <G>...
In the Lucene in Action book, there is an example of indexing synonyms. The idea is that they get indexed in the exact same position. So, would it be easier if you indexed the stemmed and unstemmed terms in different fields (or even indexes)? Then your query could do whatever you wanted... Best Erick