Yes. Where you must use them, you should time them with java.lang.System.nanoTime() and log when >5ms. So you can focus on removing the worst offenders.
Ideally, do not run database or network operations, or make system calls that do database or network operations.
Make sure the tags are in event driven mode, so they only run when a reference changes.
This should not be in an expression tag at all. It will run when no one is looking at it (useless), and cannot be internationalized for multiple simultaneous users. This belongs in UI bindings.
This is a heavy operation. Avoid tag searches except where a user triggers it.
No, expression tags in general are fine, and useful in a variety of cases.