問題は、サブクエリの結果が配列ではなく文字列として解釈されることです。これは、これら2つの形式が意味的に異なるためです。
~~ 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')