There is a column about this kind of searches in the columns section of this site.
It works like a charm, but it is very inefficient to store every word in a seperate row in the search table.
In the end, all you do is count how many times a word occurs for a given ID.
I changed it a little so I use the procedure as described in the column, but store the data in a temporary table.
Then I run a query that counts all the words for each ID in that temporary table,
so I get a list of words and how many times they occur for each ID.
It's avery small change, but it saves k's and k's of records in your search table, which ultimately speds up your search quite a bit.
Also, as someone else (I forget his/her name, sorry) mentioned, it is worth a try to add an index to the search table. Could speed up things quite a bit.