I don't know why the alias is necessary, but it does seem to be required.
Indeed, it "just is" required. In this case there is only one source for the data so the name is not used, but it is still required, for consistency's sake I guess.
I don't know wether the UNION is a performance choice, but you could try just adding the subqueries together:
SELECT (SELECT 1) + (SELECT 2);
and ofcourse you could just add the two sets of conditions together:
(r.member_id_to = ?
AND r.deleted_on IS NOT NULL
AND r.purged_on IS NULL
(pm.member_id_from = ?
AND sender_deleted_on IS NOT NULL
A benchmark will tell which )
Benchmark the options and see which works best.