Há algumas formas de se resolver isso.
Para algo mais simples você poderia utilizar um like diretamente:
SELECT campos FROM tabela WHERE campo LIKE '%lanterna%voyage%'
Repare que é necessário colocar um % entre as duas palavras digitadas pra te retornar o resultado desejado.
E na ampla maioria dos bancos de dados, você precisa garantir que tanto o termo procurado quanto armazenado estejam ambos em maiuscula ou minúscula (pode usar uma função para converter na hora da query)
Se você quiser que esse produto apareça mesmo quando o usuário digitar: voyage lanterna
(Eu como usuário esperaria isso, afinal não sei em que ordem você cadastra as coisas)
SELECT campos FROM tabela WHERE campo LIKE '%lanterna%' AND campo LIKE '%voyage%'
Ou seja, tem que quebrar cada palavra do que ele digitou, e montar um like para cada.
Claro que nesta hora você tá acabando com a performance da query.
Para obter uma boa performance, com esse tipo de flexibilidade, deveria partir para uma ferramenta de full-search text ( eu recomendo).
Você pode usar o suporte nativo do seu banco (se ele oferecer) ou utilizar o do hibernate.