If you are going to follow my suggestion and use instruction timing to generate these waveforms, then you probably want to do it in assembly, not C. If you use C there is less certainty about the number of actual instructions that are generated by any particular C statement. Also, the job is so simple, there is no need for C. The program is so simple:
Set Output 1 High
waste some time
Set Output 1 Low
waste some time
Set Output 2 High
waste some time
Set Output 2 Low
waste some time
go back to the top
The "waste some time" lines can be either a series of NOOP instructions, or a loop that wastes some time using a downcounter. If you want real duty cycle precision you should take all instruction times into account, including the ones that set the outputs and the jump and the end that goes back up to the top.
As for which micro to use, I think just about any of the small ones would work. It helps if they are simple so that every instruction takes the same length of time (except possibly for jumps which probably take longer because of flushing the instruction fifio). If you want minimal circuitry and can tolerate a frequency error of about 1%, then look for micros that have an option to run on an internal RC oscillator - no crystal needed. The PIC micro that I suggested needs no circuitry around it all, except for the usual power supply bypass cap and maybe a reset generator chip if the power might turn on slowly. Some micros have built-in brown-out reset that makes the reset generator chip unnecessary.