Problemet er, at resultatet af din underforespørgsel tolkes som en streng, ikke en matrix. Dette skyldes, at disse to former er semantisk forskellige:
~~ ANY ('...') -- will be interpreted as an array literal
og
~~ ANY (SELECT ...) -- will compare with all query results in turn
Så du kan bare skrive:
WHERE lower(name) ~~ ANY
(SELECT DISTINCT '%' || lower(brand) || '%'
FROM my_table
WHERE source = 'Orig')