For an actual benchmark of various bytecode interpretation schemes see:
http://www.complang.tuwien.ac.at/forth/threading/
These micro benchmarks also take some care to attempt realistic branch prediction rates.
Running these on current hardware, switch based interpreters still perform quite well. Direct threading gets you slightly more performance. I'd say that sticking to ANSI c and just using switch is a good plan. If you need more performance then you likely should go ahead and implement a native JIT of some sort or use JVM/.NET.