An off time of 0 isn't really practical - it means simply a HIGH signal.
Assuming a minimum off time as the same as your min on time ( 0.1µs ) means a max frequency of 5 MHz. And maximum on/off of 400/100µs means a lowest frequency of 2kHz.
If you change the system frequency of the ATMega to 20Mhz, this can easily be done by e.g. timer 1 of the Arduino.
If you leave the clock at 16MHz you have the choice of all times beeing 20% longer, or having a resolution of 0.0625µs instead of 0.1µs. The lowest possible frequency in this case is about 244Hz.
But it's really a lot different to your first demands.