Do what a real cracker would do.
Cheat.
Here's a list of the most common passwords. Load the list and cycle through them until you have a match, or have exhausted the list. If you don't find a match, then you can fall back to the brute force approach.
This is called a dictionary attack, by the way.
Another approach would be to make your program "learn" each time you use it. Instead of generating each combination of characters every time the program is run, cache the calculated strings to disk along with the data that allows you to start where you stopped. Then you can check your known list of possible passwords before generating more. Essentially, this is a dictionary attack too, but you're building the password dictionary incrementally each time you run your program.