Если я не пропускаю что-то абсолютно очевидное, я не вижу необходимости в таблице временных значений.
Следующие данные должны возвращать точно такой же результат (если только с временными таблицами не связана какая-то магия MySQL)
SELECT 0 as shared
UNION
SELECT cust_user2role.userid AS userid
FROM cust_user2role
INNER JOIN cust_users ON cust_users.id = cust_user2role.userid
INNER JOIN cust_role ON cust_role.roleid = cust_user2role.roleid
WHERE cust_role.parentrole like 'H1::H2::H3::H4::H5::%'
UNION
SELECT groupid
FROM cust_groups
WHERE groupid IN (3,4,2,1005);
(И я думаю, что то же самое должно работать с MySQL)