Frankly, I think the most important factor here is choosing the correct font.
If your goal is purely legibility, it will be a matter of picking a font that's preferably:
1) Fixed width. For picking out random numbers/letters, fixed width helps tremendously, since the kerning isn't changing as you move across the font.
2) Use a font with separate 0/O looks - those definitely mess people up. Look for other letter/number combinations that are similar. Potentially, leave 0/O out of the mix just for this reason.
3) Choose a font with subtle serifs and weight changes.
For some guidelines on legibility, see this page.
With the right font, I think you could pick any letter/number combination and have it be understandable clearly (other than potentially 0 and O). I believe the 8/B, 5/S and other samples would be clear in the correct font.
The other thing you could consider would be to use one color for letters and a second for numbers - this would give clues to the potentially ambigous number/letter combinations. I'd make this a subtle cue, though, as having a drastic color change will draw attention to letters or numbers, which will hurt the overall readability.
Edit after reading your comment to another answer:
I only need a few thousand codes, so I'm not terribly worried about the size of the domain
If this is the case, I would recommend leaving the entire number set, and just selectively adding in letters that have no visual (or aural, if you're reading these) similarity to numbers. With 6 digits, even with numbers, you have more code possibilities than you need. Selectively adding in letters to help differentiate will be easier than trying to selectively remove some. I would probably stick to 1-9, A, Z, R, W, and other letters that don't match up with numbers.