I am not quite sure what you mean by "The alarms are retrieved sorted by the Event.Message...". In fact, the alarms are delivered to you in the order the OPC server ships them to the OPC client, which is normally the order it they are generated/incoming.
There is, however, no guarantee in the OPC specs that the alarms will arrive in any particular order.
If you want to be sure you process the alarms ordered by date&time, you need to write code on your side to do so. There are properties in the incoming data that contain the necessary information - in OPC Classic, it is the eventArgs.EventData.Time that you can use.
Be aware that ordering live data is not the same as ordering data that you already have in full. The issue here is that you never know whether a new piece data will not come which would invalidate your previous ordering. For example, if you have received data with time 11, 23, 18, you may order it to become 11, 18, 23, but at any later point, at least theoretically, you may receive an alarm with time e.g. 15, and that would invalidate you previous result, because the correct answer to "what are the alarms ordered by time" now would be 11, 15, 18, 23. Any realistic usage will therefore 1) need to put a limit to how much of the ordering will actually do in such situations,and 2) lead to a "lag" before the "final" ordered result is known, in order to allow for out-of-order alarms be inserted into the right place.