Para preservar a ordem das palavras como na instrução sql LIKE '% pattern%', eu uso iregex, por exemplo:
qs = table.objects.filter(string__iregex=pattern.replace(' ', '.*'))
os métodos de string são imutáveis, portanto, sua variável de padrão não será alterada e com. * você estará procurando 0 ou mais ocorrências de qualquer caractere, exceto linhas de quebra.
Usando o seguinte para iterar sobre as palavras padrão:
qs = table.objects
for word in pattern.split(' '):
qs = qs.filter(string__icontains=word)
a ordem das palavras em seu padrão não será preservada, para algumas pessoas isso poderia funcionar, mas no caso de tentar imitar a instrução sql like usarei a primeira opção.
result = table.objects.filter(string__icontains='pattern')