An atomic subsystem will have to update its Inport and Outport at every simulation step while virtual subsystems don't need to do that. If the time took to do those Inport and Outport update has become significant, re-examine and consider changeing atomic subsystems to be virtual. Many times, I found users don't necessarily understand the difference and subsystems were made atomic by accident.
Action Subsystems are atomic subsystems by definition. You can still consider using alternatives such as conditional brahching using Switch block.
The boundary of virtual subsystem don't exist when simulating or for code generation, while the boundary of atomic subsystems are required to update at every simulation step. If subsystems are made atomic unnecessarily or by mistake, the simulation speed might suffer slightly and the result might differ.