In the observer, do you save the special price on the product?
For example:
$product->setSpecialPrice(123);
If so, then I would probably make a cronjob and run it each night. So every night you just run through all your products, if the price rules applies and are not already set, you just update the products special price and save it.
And if you want to run the script another time, just make a shell script and activate it that way at will.