ATMEGA328 - Using OCR1B in tandem with OCR1A

I'm working on a project and I need to generate a 1.5ms pulse every 25ms. I feel like I should be able to do this on Timer1 using CTC mode with both OCR1A and OCR1B, but it doesn't seem to be working. The code below was my attempt to get waveforms with the two periods (25ms and 1.5ms) to appear on different pins, but I'm getting the same wave on both (25ms) so I know something's up. How do I get this to work? Do I need to use one of the PWM modes?

void setup() {
  pinMode(A2, OUTPUT);
  pinMode(A3, OUTPUT);
  TCCR1A = 0;
  TCCR1B = (1 << WGM12);
  TIMSK1 |= (1 << OCIE1A);
  OCR1A = 50000;
  TIMSK1 |= (1 << OCIE1B);
  OCR1B = 3000;
  TCCR1B |= (1 << CS11);
}

void loop() {
}

ISR(TIMER1_COMPA_vect) {
  PORTC ^= 0b0000100;
}

ISR(TIMER1_COMPB_vect) {
  PORTC ^= 0b00001000;
}

You can't use one timer to get outputs with two different frequencies - there are two compare values, but only one number counting up. In order to get two different frequencies, you'd need two numbers counting up, not one - you'd need to use another timer.

This is sort of explained in the datasheet, and I think they have some good graphics showing the behavior of the counters in various modes. The sections on PWM are a little dense though.

I'm getting the same wave on both (25ms) so I know something's up.

Yes, you are toggling each output pin every 25ms but out of phase. A2 is toggled at the end of each cycle and A3 is toggled 1.5 ms into each cycle. Because of the toggle, you have a 50% duty cycle on each pin with 50ms (20Hz) cycle time

I need to generate a 1.5ms pulse every 25ms

There are many ways to do this, but closest to what you currently have is to change the Comp_A vector which triggers every 25ms such that it turns on the pin you want high for 1.5ms. Then use the Comp_B vector at 1.5 ms to turn it off. You will still have A2 toggling every 25 ms.

void setup() {
  pinMode(A2, OUTPUT);
  pinMode(A3, OUTPUT);
  TCCR1A = 0;
  TCCR1B = (1 << WGM12);
  TIMSK1 |= (1 << OCIE1A);
  OCR1A = 50000;
  TIMSK1 |= (1 << OCIE1B);
  OCR1B = 3000;
  TCCR1B |= (1 << CS11);
}

void loop() {
}

ISR(TIMER1_COMPA_vect) {
  PORTC ^= 0b0000100;
  PORTC |=  0b00001000;//should turn on pin A3
}

ISR(TIMER1_COMPB_vect) {
  //PORTC ^= 0b00001000;
  PORTC &= ~(0b00001000); //turn off pin A3
}