Problemet är att resultatet av din underfråga tolkas som en sträng, inte en array. Detta beror på att dessa två former är semantiskt olika:
~~ ANY ('...') -- will be interpreted as an array literal
och
~~ ANY (SELECT ...) -- will compare with all query results in turn
Så du kan helt enkelt skriva:
WHERE lower(name) ~~ ANY
(SELECT DISTINCT '%' || lower(brand) || '%'
FROM my_table
WHERE source = 'Orig')