Na da würde ich doch jeweils die Tabellen direkt auf die IDs filtern und die Einzelergebnise (left) joinen oder sogar outer joinen, wenn nötig bzw. möglich.
Falls einigermaßen passende Indizes vorliegen sollten die Einzelsuchen blitzschnell gehen und die dann wohl sehr kleine Ergebnismenge ganz easy (flott) zu joinen sein.
Code:
--pseudo
select * from
(Select <Daten> from person where filter = Id) p (left|full outer) join
(select <Daten> from users where filter = UId) u
on p.id = u.id