What proportion of contacts have owner_id=7 and user_id is null?
If it's a large number of contacts, I'd try the following:
create temporary table tusers as
select coalesce(p.ref_contact_id,e.ref_contact_id) as id,
u.id as user_id
from my_users u
left join phone_number p on on p.significant=u.phone_significant
left join email_addresses e on e.email=u.email
where p.ref_contact_id is not null or e.ref_contact_id is not null;
create unique index tusers_idx on tusers(id);
update contacts set user_id=t.user_id
from tusers t
If it's a small number of contacts, then it might be worth creating a temporary table of that subset, indexing it, then replacing "where p.ref_contact_id is not null or e.ref_contact_id is not null" with "where p.ref_contact_id in (select id from TEMPTABLE) or e.ref_contact_id in (select id from TEMPTABLE)"