SELECT * FROM huge_table h, tiny_table t WHERE UPPER( h.id ) = UPPER( t.id )
What about :SELECT * FROM huge_table h WHERE UPPER(id) IN (SELECT upper(id) FROM tiny_table t)
Or, try opening a cursor on your original query and using FETCH. It might result in a different plan.
Or lower random_page_cost.