If your input expectations are that long, is it really necessary to re-interpret the string character-by-character?
What you're actually going to do with the string once you've read it will affect performance more than the actual string reading.
Performance is also heavily dependent on the browser you're testing in. For example, a simple array.push() on 1,000,000 characters read in using charAt() in a for look will take approximately 30ms in Chrome, but can take up to 1400ms in IE8 (and about 450ms in Fx 3.6).
Could you perhaps give a use case of how you would need to interpret the string, what sort of things need to be done to it to "make meaning" out of it?