I'm dannigd's husband. (Hi honey!

)
Most of the time for jobs like this I'll be tapped to write a program that generates the codes. However, one route you could take would be to use a password generator, like
APG. It's got options to generate password using restricted character sets. To de-dupe, pipe the output through sort and uniq (just generate enough extras to ensure that after de-duping you have enough codes), then re-shuffle (if desired).
If you eliminate 1IG60OQ2Z5S, that's 25 characters available per position. You'd only need 5 characters to generate 5 million codes. 6 characters allows for 244 million codes, which should be enough to prevent guessing -- you'd be using just over 2% of the available space.