Is it possible to put priorities between external interrupts?
Interrupts are not the right place to handle priorities. The interrupt
handlers should be as short as possible. Then the likeliness of two of
them happening at the same time is very low. And even if it happens, the
lowest-priority interrupt will only be delayed by a handful of
microseconds, which should not be a big deal.

In this case, the sensible approach is to have the interrupt handlers
set a global flag and do nothing else. Then the main program will
check the flags and do the real work, handling the priorities as needed.

Conceptually, the code could be something along these rough lines:

// Global flags.
volatile bool alarmDetected;
volatile bool shockDetected;

// Interrupt handlers.
void onAlarmInterrupt() { alarmDetected = true; }
void onShockInterrupt() { shockDetected = true; }

void loop() {
    if (shockDetected) {  // check this first!
        measureShockData();
        if (gotEnoughShockData()) {
            shockDetected = false;
            alarmDetected = false;  // ignore the alarm
            goToSleep();
        }
    } else if (alarmDetected) {
        recordSensorData();
        if (gotEnoughSensorData()) {
            alarmDetected = false;
            goToSleep();
        }
    }
}


Note that you can remove the line that ignores the alarm in case of
shock. If you do so, the alarm will be handled after all relevant
shock data has been recorded.