MySQL: how to implement a text search without delimiter
Digrams (or trigrams).

Take each pair (or triple) of letters in the text, hash it down to 0..63, set a bit in a BIGINT UNSIGNED.  The "OR" of a few dozen bits together like that will usually lead to about half the bits being on.  (If most of the bits are on, the method is less effective; if too few bits are on, it wastes space.

Do that as you store the data, and store the bigints in extra columns.  When testing, do likewise to the data coming in -- get a bigint representing the query.

WHERE (big3 &amp; test3) = test3


Where big3 is the bigint for field3 and test3 is the bigint for "str3", that clause will check that all of the letter pairs of "str3" are probably in field3.

For the combined test of field1/2/3 against "str1", 

AND ((big1 | big2 | big3) &amp; test1) = test1


Better yet is to precompute (big1 | big2 | big3) into a combined big123 initially.

I said "probably".  That means you will get some false positives and need to double check the 'hard' way, as you already discussed.

Note:  If there is some meaning you would like to apply for "word boundary", that can easily be done in the building of the bigints.

Hash

One such hash:

SELECT HEX(1 &lt;&lt; (CONV(MID(MD5(LOWER('th')), 5,2), 16, 10) &amp; 0x3F));
+-------------------------------------------------------------+
| HEX(1 &lt;&lt; (CONV(MID(MD5(LOWER('th')), 5,2), 16, 10) &amp; 0x3F)) |
+-------------------------------------------------------------+
| 8000                                                        |
+-------------------------------------------------------------+


Translate this into your programming language; it would probably be easier there, not in SQL.

Dissecting it:

HEX(1 &lt;&lt; (CONV(MID(MD5(LOWER('th')), 5,2), 16, 10) &amp; 0x3F))
                              ^^  sample digraph
                       ^^^^^  fold case unless you need to differentiate
                   ^^^  a readily available hashing function
               ^^^                   ^^^  -- pick some hex digits out of it
          ^^^^                             ^^^^^^  -- hex -&gt; decimal
                                                   ^^^^^^  -- only 6 bits
    ^^^^  -- shift "1" to the bit position given by the 6-bit number
^^^  -- (just for displaying the result; not part of the algorithm)