This challenge is inspired by C-UL8R's thread at How can I improve/shorten my C code?

The challenge is to count the number of vowels and consonants in the text file that contains the works of William Shakespeare. The text file can be grabbed from https://ocw.mit.edu/ans7870/6/6.006/...hakespeare.txt

Here's the reference implementation:

Code:
/***********************************************
* charcount.c : count consonants and vowels in a file
***********************************************/
#include <stdio.h>
#include <stdint.h>
#include <ctype.h>
#include <sys/time.h>


static char fname[] = "t8.shakespeare.txt";


static int isVowel(int c) {
  c = tolower(c);
  return (c == 'a') || (c == 'e') || (c == 'i') || (c == 'o') || (c == 'u');
}


static int isConsonant(int c) {
  if(isVowel(c)) return 0;
  return isalpha(c);
}


int main(int argc, char *argv[]) {
   struct timeval start, end;
   uint32_t vowelCount = 0;
   uint32_t conCount = 0;

   gettimeofday(&start, NULL);

   FILE *f = fopen(fname,"r");
   if(f == NULL) {
      printf("Unable to open %s\n",fname);
      printf("\n");
      printf("Please download the test file from \n");
      printf("https://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/files/t8.shakespeare.txt\n");
      return 0;
   }

   //=========== Start of challenge code =========
   int c = getc(f);
   while(c != EOF) {
      if(isVowel(c)) {
         vowelCount++;
      }
      if(isConsonant(c)) {
         conCount++;
      }
      c = getc(f);
   }
   //=========== End of challenge code =========

   fclose(f);

   gettimeofday(&end, NULL);

   printf("There are %u consonants and %u vowels in the Complete Works of William Shakespeare\n",conCount, vowelCount);
   printf("Time taken = %li microseconds\n", (long int)(end.tv_sec-start.tv_sec)*1000000+(end.tv_usec-start.tv_usec));
}
Of course you can add as many functions or other code as you like. Code size or memory usage isn't a concern, it just has to be portable C code.

Scoring will be a honesty system, and just be a "this is X times better than the reference code on my machine". It is expected that you will compile both code with the same set of compiler options, with optimizations turned on.

e.g. On my i3-3110M laptop the above code takes 98733 microseconds to run. If I write an improved version that takes 12345 microseconds to run it is 98733/12345 = 7.99x the speed of the original.

For completeness sake, here is the answer I get - I hope it's right!

Code:
There are 2357034 consonants and 1433891 vowels in the Complete Works of William Shakespeare
Time taken = 98733 microseconds
I'm guessing a 5x is easily possible, a 10x speedup should be achievable, but I'll be very surprised if anybody gets a 20x speedup without resorting to using multiple threads or CPU specific features.

I'll post my best version in about a week...