Just to brainstorm a little. One option you could investigate is query time boosting. As you said Hibernate Search allows index time boosting via annotation. However, in your case you probably could work with search time boosts. As you construct your Lucene Query you can apply a boost for each field you include into the search. Check the Lucene API (
http://hudson.zones.apache.org/hudson/job/Lucene-trunk/javadoc//org/apache/lucene/search/Query.html).
Alternatively you could implement the SortComparatorSource interface (
http://hudson.zones.apache.org/hudson/job/Lucene-trunk/javadoc//org/apache/lucene/search/SortComparatorSource.html). I've used this approach myself before and it worked very well. "Lucene in Action" contains some example code on how to do this.
I hope this helps you getting onto the right track :)