i belive that loop is the way to go.
Matt Navarre uses the loop and has many find requests using his FMSEarchResults and it is super fast as he has demo'ed it to searh wikipedia and it rocks out.
SO i believe that is the way to go, but nothing beats a failure like a trial or vice versa!
I've found for large sets, I have to loop through the records and build the key list, then I update a utility record in the SQL database, which marks the records in the found set via a stored procedure. I then go to the layout and do a find on a FoundSet flag field updated by the stored procedure. Not great, but it does work. The trick is creating and destroying flag records in the SQL DB efficiently and keeping tabs for each user. I wish there were a better way, but at present this is the best I've been able to do.
I'll have to take a look at Matt's technique and see if it works better.