Problém je v tom, že výsledek vašeho poddotazu je interpretován jako řetězec, nikoli jako pole. Je to proto, že tyto dvě formy jsou sémanticky odlišné:
~~ ANY ('...') -- will be interpreted as an array literal
a
~~ ANY (SELECT ...) -- will compare with all query results in turn
Takže můžete jednoduše napsat:
WHERE lower(name) ~~ ANY
(SELECT DISTINCT '%' || lower(brand) || '%'
FROM my_table
WHERE source = 'Orig')