Your db schema is wrong. No need to have seperate tables for each year etc. The you would have no need to be running a UNION query.
As it is, you can order the results by the judiciouse use of barckets around the individual SELECTs.
$query = "(SELECT date,meet,fname,sname,event,perf,mid,perf2 FROM out2006 WHERE fname LIKE '" . $fn. "%' AND sname ='$sn')
UNION ALL
(SELECT date,meet,fname,sname,event,perf,mid,perf2 FROM indoor200506 WHERE fname LIKE '" . $fn. "%' AND sname ='$sn')
UNION ALL
(SELECT date,meet,fname,sname,event,perf,mid,perf2 FROM out2005 WHERE fname LIKE '" . $fn. "%' AND sname ='$sn')
UNION ALL
(SELECT date,meet,fname,sname,event,perf,mid,perf2 FROM indoor200405 WHERE fname LIKE '" . $fn. "%' AND sname ='$sn')
UNION ALL
(SELECT date,meet,fname,sname,event,perf,mid,perf2 FROM out4 WHERE fname LIKE '" . $fn. "%' AND sname ='$sn')
UNION ALL
(SELECT date,meet,fname,sname,event,perf,mid,perf2 FROM indoor3 WHERE fname LIKE '" . $fn. "%' AND sname ='$sn')
ORDER BY event";
Your current mysql error is because you are mixing single and double quotes. Just put single quotes around the string values.