Zgadza się, to działa jak pies i ogranicza się do pracy z jednym ogranicznikiem, ale miejmy nadzieję, że podsunie ci pomysł.
SELECT aWord, COUNT(*) AS WordOccuranceCount
FROM (SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(concat(SomeColumn, ' '), ' ', aCnt), ' ', -1) AS aWord
FROM SomeTable
CROSS JOIN (
SELECT a.i+b.i*10+c.i*100 + 1 AS aCnt
FROM integers a, integers b, integers c) Sub1
WHERE (LENGTH(SomeColumn) + 1 - LENGTH(REPLACE(SomeColumn, ' ', ''))) >= aCnt) Sub2
WHERE Sub2.aWord != ''
GROUP BY aWord
ORDER BY WordOccuranceCount DESC
LIMIT 10
Polega to na posiadaniu tabeli zwanej liczbami całkowitymi z pojedynczą kolumną o nazwie i z 10 wierszami o wartościach od 0 do 9. Potrafi ona obsłużyć do ~1000 słów, ale można ją łatwo zmienić, aby poradzić sobie z większą liczbą (ale spowolni jeszcze bardziej).