100kHz is a PWM period of 10us. At 16MHz the MCU can execute
at most 160 machine code instructions in 10us (some instructions take 2 or more clock cycles). Your on time plus dead time count is 105. That means to get 100kHz you can't have more than 1 machine code instruction in the loop. How do you expect it to:- 1. compare cycletime to 0, 2. compare cycletime to ontime + deadtime, 3. increment cycletime, 4. go back to the start of the loop - using only one instruction?
C source code that looks terse and simple may translate into hundreds or thousands of machine code instructions. However the biggest problem with your code is the algorithm, which does several math operations for every PWM count. This is unnecessary and very inefficient.
There are two ways you can dramatically speed up the PWM frequency:-
1. Instead of incrementing a counter in a loop, use a time delay function that only has to be called twice during the PWM period. Arduino has delayMicroseconds(), which should get you about 9.5kHz (1/105us). To go faster you would need a custom delay function which has higher resolution. The theoretical limit is 150kHz, but to get this you would probably need highly optimized machine code.
2. Use the hardware PWM module. On the Arduino this is normally set to ~490Hz , but it can be increased to
62.5kHz by programming the PWM registers directly, or even higher if you don't need 8 bits. Hardware PWM is also generally more stable and predictable than 'bit-banging', and allows the MCU do do other stuff while the PWM is being generated.