Yes, you would have to create an instance
for each order.
I would just create one Timer (first check if it already exists) and then add a "Notification" to the Timer service for each order with one repetition.
When the notification is send and retrieved by the (also one, previously registered Notification Listener) it checks if the order state and if not changed then do whatever necessary (no String Monitor needed).
ATTENTION: whenever a server is going down you will loose the notifications and therefore the listener will not be informed. So you maybe need a way to make it persistent and when the server boots again to reset the Timer service.
Have fun - Andy