Det låter som att du behöver använda ett FULLTEXT-matchande uttryck i ditt join-villkor.
Jag har aldrig använt en fulltextmatchning i anslutningsvillkor, så jag är inte säker på att detta kommer att fungera, men hypotetiskt kan detta göra det:
SELECT DISTINCT c.*
FROM corpuses c JOIN searches s
ON (MATCH(c.title, c.body) AGAINST (s.term));
Okej, jag har provat det med dina tabelldefinitioner och några exempeldata från MySQL-manualen. Här är en fråga som fungerar (testad med MySQL 5.1.30):
SELECT *
FROM corpuses
WHERE MATCH(title, body)
AGAINST ( (SELECT GROUP_CONCAT(term SEPARATOR ' ') FROM searches)
IN BOOLEAN MODE);