Можете да използвате низови функции, като например:
select id, name
from subjects
where name like concat('%', @search, '%')
order by
name like concat(@search, '%') desc,
ifnull(nullif(instr(name, concat(' ', @search)), 0), 99999),
ifnull(nullif(instr(name, @search), 0), 99999),
name;
Така получавате всички записи, съдържащи @search. Първо тези, които го имат в началото, след това тези, които го имат след празно място, след това по позицията на срещата, след това по азбучен ред.
name like concat(@search, '%') desc
използва булева логика на MySQL между другото. 1 =вярно, 0 =невярно, така че подреждането на това низходящо първо ви дава истина.
SQL цигулка:http://sqlfiddle.com/#!9/c6321a/1