The "TopLevelJoinQuery" join implementation added recently performs well in a variety of circumstances. However we can improve the performance further by adding logic to handle the special case where fields being joined are the same (e.g. fromIndex is null and fromField == toField).
Currently this self-join usecase still does a lot of work to convert "from" ordinals into "to" ordinals. If we make the query (or QParserPlugin?) smart enough to recognize this special case we can skip this step and improve performance greatly in this case.