Based on my quick reading* of the mongoid_search code it looks like it is using a regex query against the keywords array which requires a full scan over the index. In fact the way it is being done is probably far less efficient than just doing a normal regex table scan without the keyword array. If you were to modify the search method to do a normal string query (maybe using $in for OR and $all for AND) you should get
much better performance.
*Ruby isn't my native language so I may be missing something.