This is yet another argument for never using dynamic SQl if you have a choice. If you are creating queries on the fly either through the user app or in dynamic SQl in a stored proc, how would you know whether they are ever accessing those tables, etc?
To simplify the task, I would first identify which objects I know are used. Then you have fewer to research. You could run profiler for a bit to identify the most common ones being used. Once you have a smaller list, the task is not so daunting.
We have an sp that searches through all the sps in a database for a named object and tells us where it is refernced. Very handy for something like this, but it still wouldn't find things used in steps of jobs, DTS packages etc. (search google for sp_grep for various versions of this)
You might also search your application source code for references to objects.
Once you have the list of ones to research, pay particular attention to any that might indicate a quarterly or annual report. These may be used so infrequently that your profiler list didn't include them. Check with the creator of the proc if possible to see if they are still used or look for a job that runs them.
Finally, once you have a potential list of objects that you think can be deleted, send it around to the entire development staff. Likely you will have some that someone knows the use for or knows positively that it is no longer in use because he or she wrote the replacement code.
Before deleting any objects, we normally re-name them with an _ at the beginining. Then it is easy to get them back if you start getting errors. In a big effort like this (rather than doing this at the time the object stops being used), I would create a copy of the database as is before dropping any objects. Again this will make it easier to get back any that were dropped and you found out they were being used.
After dropping all the objects on dev, do an all-out test of the system. Try everything in the user interface, run all reports especially those not run often (annual or quarterly ones), run all jobs, run all imports. Far better to find something missing on dev than in prod.
"NOTHING is more important in a database than integrity." ESquared