1) При необходимости вы можете вручную выселить сущности из кэша 2-го уровня. SessionFactory имеет несколько методов для этой цели; некоторые выселяют один экземпляр сущности (или коллекции); другие выселяют все сущности данного класса (или имя сущности / имя роли).
Тем не менее, вы обычно не должны делать этого - Hibernate будет поддерживать кэш для вас обновленным (если вы не делаете какие-то довольно специфические вещи, такие как обновления SQL - в этом случае уточните свой вопрос).
2) Как правило, нет, кэшировать все сущности нехорошо. Обычно рекомендуется кэшировать неизменяемые объекты, а также те, которые часто загружаются / редко обновляются; при условии, что у вас их нет. Но опять же, это действительно зависит от того, что вы делаете.
Timeout - это костыль (или защита, если хотите), предназначенная для поддержания разумного размера / состояния кэша, даже если вы этого не сделаете. Хорошая стратегия кэширования не должна опираться на нее.