Sometimes if you can avoid a "Using temporary; Using filesort" it's worth it, though I haven't done extensive testing.
1 SIMPLE favorites ref source_id,user2_id source_id 3 const 137 Using index; Using temporary; Using filesort
1 SIMPLE users eq_ref PRIMARY,updated PRIMARY 3 apm.favorites.target_id 1 Using where
Instead of asking mysql to sort by name, in ruby I do
results.sort_by {|u| u.name.downcase}
The resulting mysql query is now simpler:
1 SIMPLE favorites ref source_id,user2_id source_id 3 const 137 Using index
1 SIMPLE users eq_ref PRIMARY,updated PRIMARY 3 apm.favorites.target_id 1 Using where
Of course you wouldn't want to do this if you returned more than a few hundred rows.