Don’t forget that they may nested and used in weird places (e.g. snippets inside of snippet calls, inside of chunks, nested elements in the template, snippets in template variables and meta tags, etc.).
I think I’d start by getting the names of all the elements in the element tables (site_snippets, site_htmlsnippets, etc.), one table at a time, and just search the whole database for those names to get an idea what turns up. A name that appears only once is guaranteed to be an orphan and you don’t have to worry about missing some odd place where it’s used. It will have to be run more than once because, for example, a chunk that’s used in an unused snippet wouldn’t show up as an orphan until after the snippet is deleted.
It sounds like a fun project.