I read this post this morning and thought about answering but the urgent cry for help accompanied by a couple of assumptions, a link to some random guy's dodgy code and absolutely zero information just made me mad.
Okay. I'm glad that's off my chest.
If switch bounce in the encoders were a problem I'd expect the robot to travel a much shorter distance than desired. So, switch bounce is unlikely to be an issue.
We do not know if the encoders are mechanical, magnetic, optical or something exotic. At 2048PPR I very much doubt they are mechanical - though I would love to see the link that proves me wrong on this - so, switch bounce is unlikely to be an issue.
If the encoder is attached to the drive wheel and said wheel rotates at, say, one revolution per second then you only have 2048 pulses to count each second, for a resolution of 360/2048 = 0.18 degrees of rotation, a pulse rate I would hope to be within the capability of the Arduino interrupts + FastRead or PortRead. If the encoder is attached directly to the motor and you have, say, a 100:1 gear ratio that makes for a resolution of 0.0018 degrees (!) and a massive 204800 pulses per second for my one revolution per second example. If the latter is what you are striving for then you should perhaps consider an fpga, or a psychiatrist, note these two options are not mutually exclusive - that was a joke.
What resolution are you trying to achieve? How many pulses per second are you expecting? Code? Data sheets?
This brings us to the the code in the link should you use it.
Using type long on an 8 bit processor is not the best of ideas. Using type signed or unsigned long in an interrupt routine verges on the double-plus-ungood. Make the data type used in the interrupt routine sufficient to handle the pulses you are expecting between loops around your main function. In the main function you can totalise to a wider data type - even a pair of signed/unsigned longs if necessary.
When accessing the variables used in your interrupt routine you should (almost) always do so with interrupts disabled. This is especially true if two or more values should be kept in synchronisation or if the data types involved require more than a single instruction to copy, such as long ints on an 8 bit micro.
http://arduino.cc/en/Reference/noInterrupts noInterrupts();
// copy the values from your interrupt count variables to local variables
interrupts();
// do interesting stuff