I think this will be hard to do with PWM, and using an IntervalTimer won't meet your accuracy requirements, so it may not be the only solution, but I think I can outline something that will work. Every timer has two fundamental capabilities, input capture and output compare. Input capture is simply detecting an edge, and output compare is generating an edge, and both have the ability to generate an interrupt on the event. The basic idea would be to generate edges on two output compare channels by setting the compare registers of the two output channels, and to update those on each edge. This would let you generate the two camera signals with accuracy (resolution, actually) of whatever is the frequency of the clock used by the timers.
Let's say you have 3 channels of a timer that has 32-bit capture/compare registers, and is clocked at F_CPU/4 = 150 MHz. You could assign the channels like this:
- input capture on rising edge of the GPS PPS
- output compare for camera1
- output compare for camera2
- and your Compare signal could be any digital input
When you get a rising edge on GPS PPS, your interrupt function would read the status of the Compare signal. If high (and previously low), it would set the two output compare pins high, then use the frequency setting to configure the compare registers for the times at which those signals should go low. The values for the compare registers for the outputs would be computed from the value of the capture register for the input, i.e. output compare value = input capture value + time to next edge. Each time an interrupt occurs for a Camera1 and Camera2 output compare, the compare registers would be updated to generate the next edge, whether high or low. Meanwhile, on each rising edge of GPS PPS, you would read the value of the Compare input and either continue (if high) or disable (if low) the output compare signal generation. Since you have a 150 MHz clock, the resolution of the edge control would be about 1/150M = 7 ns. For a minimum frequency of 0.1 Hz, you would have a period of 10 seconds, but two output compare interrupts per period, so you would need a maximum delay of 5 seconds between edges, which would be 750M clock signals, which fits into 32 bits.
The interrupt rates are very low. I think you would want the Camera1/2 interrupts to be higher priority than the GPS interrupt.
EDIT: TeensyTimerTool is an excellent starting point for anything you might want to do with timers.