Because your search string doesnt look for those terms independantly.
% is the wildcard character. Putting in "sala ultra lok" returns the query string: p.productTitle LIKE '%sala ultra lok%' OR ....
Which will only return products using that phrase. If you want to tokenize the result, you're gonna have to reconstruct the code a bit; change the preg_replace to a preg_split, and construct a multiple-or query using each part.
Give example, SL. Okay, here goes.
1) sala ultra lok toolkit
2) sala ultra-lok toolkit
3) ultra-lok sala toolkit
4) ultra mega wrench
Search Term: sala ultra lok
Your original query would match 1.
The preg_replace would match 1 and 2.
Preg-splitting and compound-or would match all 4.
Preg-splitting and compound-AND would match 1,2, and 3.