Here are a few tips:
Optimisation of rules is about careful study of the LogViewer:
1) Check the Log Viewer for the execution of rules that refer to the object. These may be expensive. Execution of many of them may be unnecessary. Turn them off by going to the Advanced tab of the rule and ticking "Do not execute referred" (or something like that - the last checkbox there)
2) Aggregate operations (SUM, COUNT etc) can be expensive if you have lots of data. Try not to use them if you can
3) Unconditional rules can be expensive (especially if they use aggregate operations). Make them conditional (using WAS CHANGED expression, for example)
4) Check for repetitive execution of rules. The rule engine can execute rules repetitively if the next rule triggers a condition that causes the previous rule to fire again. Optimise this carefully. Use rule priorities to make sure that expensive rules are only executed once