When you do a search through all these tables, are there seperate searches for against each table, do you generate multiple searchs in one table from a query against another table? How are the data structured?
I've found that using more tables is great, but if you have one table that references another, you want to let the database do the dirty work like subselects and joins, not your PHP code. Every db query sent and received has a fairly high overhead, so on most databases, it is faster to write one really huge, ugly piece of sql that does it all at once than to iterate over a dataset building queries on each entry in the set.
What you really want to shoot for is "normalization". To make a fancy and complex subject simple, you want to make sure that you don't have the same data over and over again in your tables.
I.e. if you have a personnel table, and you have a dept number for each person in the table, you shouldn't store the department name in the personnel table, since you'd be storing the same name(s) over and over there.
You should build a table called depts, and reference it something like this:
select lname, fname, dept_no, depts.dept_name from personnel where depts.dept_no=personnel.dept_no order by depts.dept_name, lname;
Yes, this query is slower in execution than keeping everything in one big table, but the maintenance is much easier and it's much less likely someone in dataentry will make a single letter typo in the department name and screw up your query's output.