Tuning form questions should include more info but I see one point that may help you.
if you change it like this you will have to query the PENTIONS table only once and if you have an index on (FAILURE_ID, PERIOD ) that should be good for performance.
select count(*) from EMP.PENSIONS
where (FAILURE_ID, PERIOD ) IN (SELECT max(PERIOD) , max(FAILURE_ID) FROM EMP.PENSIONS )
Whenever you have a tuning related question, please follow the steps explained here:
Besides that, I recall having tuned a similar query successfully using the following approach, not tested, but (depending on your database version) maybe worth a try as well:
select count(*) from emp.pensions p where not exists ( select null from emp.pensions p1 where p1.failure_id > p.failure_id and p1.period > p.period );
It depends on how your table is indexed and the data distribution.
In some cases the other answers given to you might be better.
In other cases, for example failure_id and / or period are indexed (separately) and very selective, your query might perform better (not sure the other can take advantage of an index)