I don't see how LIKE is going to do much for you, except when it comes to a partial name match. Auburn may be a type of brown hair colour in the real world, but sql is not going to match it. You are after a means of wieghting people so that you can order them. I'm not familiar with the stored procedure and user defined function parts of mysql, but that is what it one would use in SQLServer, Access, or Oracle. In php/mysql I would use a script that reads in all records and processes them something like this:
For each field that matches you add a score, then subtract the age differance between target and subject. Those with the highest score have the closest match. You could vary the value scored for different field matches according to their priority or importance. Likewise with body wieght, subtract a value for how much they differ.
To do part of it in sql, you would need a query that count the occurances in a subquery. The subquery would be a UNION query of queries that match one field each.
SELECT count(id), id
(SELECT id WHERE haircolour=$hair
UNION
SELECT id WHERE eyecolour=$eyes
UNION
SELECT id WHERE name LIKE $name
etc
I hope you get the idea.