Componha predicados LINQ para SQL em um único predicado

(Uma pergunta anterior,Recursivamente (?) Componha predicados LINQ em um único predicado, é semelhante a isso, mas eu realmente fiz a pergunta errada ... a solução lá satisfez a pergunta como foi colocada, mas não é realmente o que eu preciso. Eles são diferentes, no entanto. Honesto.)

Dado o seguinte texto de pesquisa:

"keyword1 keyword2 ... keywordN"

Quero terminar com o seguinte SQL:

SELECT [columns] FROM Customer 
  WHERE (
        Customer.Forenames LIKE '%keyword1%' 
        OR 
        Customer.Forenames LIKE '%keyword2%'
        OR
        ...
        OR
        Customer.Forenames LIKE '%keywordN%'
    ) AND (
        Customer.Surname LIKE '%keyword1%' 
        OR 
        Customer.Surname LIKE '%keyword2%'
        OR
        ....
        OR
        Customer.Surname LIKE '%keywordN%'
    )

Efetivamente, estamos dividindo o texto da pesquisa em espaços, aparando cada token, construindo uma cláusula OR de várias partes com base em cada um e depois AND 'juntando as cláusulas.

Estou fazendo isso no Linq-to-SQL e não tenho idéia de como compor dinamicamente um predicado com base em uma lista arbitrariamente longa de subpredicados. Para um número conhecido de cláusulas, é fácil compor os predicados manualmente:

dataContext.Customers.Where(
    ( 
      Customer.Forenames.Contains("keyword1") 
      ||
      Customer.Forenames.Contains("keyword2")
    ) && (
      Customer.Surname.Contains("keyword1") 
      ||
      Customer.Surname.Contains("keyword2")
    )
);

Em resumo, preciso de uma técnica que, dados dois predicados, retorne um único predicado que compõe os dois predicados de origem com um operador fornecido, mas restrito aos operadores explicitamente suportados pelo Linq-to-SQL. Alguma ideia?

questionAnswers(2)

yourAnswerToTheQuestion