Você deve separar os arrays de nível superior e verificar os elementos de lá:
select distinct id, content
FROM test
JOIN lateral (
select elems
FROM jsonb_array_elements(content) jae(elems)
) all_arrays ON TRUE
WHERE elems ->> 0 = 'first 1'
and elems ->> 1 ilike '%3%'
ORDER BY 1;
Quanto à melhor maneira de fazer isso, isso depende muito de seus dados reais - quantas linhas, quão grandes são essas estruturas jsonb, etc. Em geral, porém, uma pesquisa como ilike '%3%' se beneficiará de índices baseados fora do pg_trgm porque eles não podem usar índices btree tradicionais.
Edit:a consulta de @Abelisto nos comentários é melhor porque deve ter mais desempenho, especialmente se o conteúdo puder conter milhares de elementos:
select * from test
where exists
(select 1
from jsonb_array_elements(content) jae(elems)
where elems ->> 0 = 'first 1'
and elems ->> 1 ilike '%3%'
);