Silly question: why do you need to use analogRead() in your frequency generation code?
The reason that the analogRead() function is so slow is because of a call to delay(1) in it. Without this call, I was getting inconsistent results (i.e. sometimes the function would return the value of the wrong pin). At the time, we had no delayMicroseconds() function, so I used the smallest delay I could. If there's a need for the function to run faster, I can work on it, but until now, no one has complained.