Проблемът е, че резултатът от вашата подзаявка се интерпретира като низ, а не като масив. Това е така, защото тези две форми са семантично различни:
~~ ANY ('...') -- will be interpreted as an array literal
и
~~ ANY (SELECT ...) -- will compare with all query results in turn
Така че можете просто да напишете:
WHERE lower(name) ~~ ANY
(SELECT DISTINCT '%' || lower(brand) || '%'
FROM my_table
WHERE source = 'Orig')