There’s the MusicBrainz project that seeks to enable easy identification of audio files. It does it by creating a unique digital ‘fingeprint’ for each song that can be identified even across different formats and ripping methods. The system also accounts for any metadata that’s already there and pulls it into a community-database that gets more accurate as people use it and refine the database by making corrections.
Using the client programs they’ll sift through a bunch of music and automatically give it appropriate ID3 tags and/or rename them. I used the original ClassicTagger program a few years ago and it worked great – you just throw a bunch of songs into it and it magically knows what they are, even if they were lacking tags or had wrong tag info. Any that it’s not sure of are put into another list that you can just fill-in the blanks for, but it was able to identify more than 80% of my songs and tag them.
The current PicardTagger program is the one to use – it’s supposed to be technically superior and also runs on Linux and Mac (as well as Windows).
This only does the standard ID3 tags so you’ll get year, artist,etc. But once you get all your songs fully tagged you can find other solutions that can go through and add lyrics/artwork based on the tag info.