Interrupt Management - Large AVR Projects
The first rule of using interrupts:  Keep them very short.

When an interrupt occurs, whether it is enabled or not, and whether it is currently servicing an interrupt or not, an Interrupt Fired flag gets set.  Every interrupt has one of these flags associated with it (such as SPSR.SPIF).  That always gets set as soon as the interrupt fires.

The interrupt system then cycles through the interrupts looking for any interrupt flags that have been set, and if the interrupt is enabled it then jumps to the ISR.

It will do that no matter how long ago the interrupt occurred.

So the question is not "will I miss an interrupt because I'm in an ISR", but "Will I miss successive interrupts because I am in an ISR".

So first you need to calculate the maximum rate at which an interrupt from one source can occur.

Then you check your ISR routines, and make sure that they never exceed that minimum interrupt period.  Consider moving code out of an ISR and instead setting flags to get your main loop to perform operations instead.

In a more complex environment (5 interrupts is NOT lots!) you may, if resources allow, consider creating an interrupt event queue, where an event is added to a list of incoming events when the interrupt occurs, and your main loop is then free to process those events in order.  You may need to use queues with different priorities for different interrupts.

That's not really feasible on a small MCU like the '328P as it lacks the resources to effectively manage those kinds of queues.