The first thing I would recommend exploring when you have a simulation nearly grinding to a halt with extremely small step size is trying a stiff solver.
https://www.mathworks.com/help/matlab/math/solve-stiff-odes.html https://www.mathworks.com/help/simulink/slref/exploring-variable-step-solvers-using-a-stiff-model.html
If that doesn't help, look into zero crossings or other problems using the Solver Profiler like @wolfie suggested. https://www.mathworks.com/help/simulink/slref/solverprofiler.html