If people's suggestions do not provide a significant increase in speed, there is a possibility that your real problem is that the best query plan for the two possible connection conditions is different. For this situation, you would like to make two queries and merge the results in some way. This is likely to make your request much, much uglier.
One obscure trick I used for this kind of situation is to do GROUP BY without querying UNION ALL. The idea looks like this:
SELECT a_field1, a_field2, ... MAX(b_field1) as b_field1, MAX(b_field2) as b_field2, ... FROM ( SELECT a.field_1 as a_field1, ..., b.field1 as b_field1, ... FROM current_tbl a LEFT JOIN import_tbl b ON a.user_id = b.user_id UNION ALL SELECT a.field_1 as a_field1, ..., b.field1 as b_field1, ... FROM current_tbl a LEFT JOIN import_tbl b ON a.f_name = b.f_name AND a.l_name = b.l_name ) GROUP BY a_field1, a_field2, ...
And now the database can perform each of the two connections using the most efficient plan.
(A warning about the flaw in this approach. If a row in current_tbl joins multiple rows in import_tbl, you can merge the data in a very strange way.)
Random random performance recall. If you have no reason to believe that potential duplicate lines exist, avoid DISTINCT. This results in an implicit GROUP BY, which can be expensive.
source share