So you can see how to generate the suffixes per my previous answer. So the list of potential names you'd like to use is something like:
with
chars as ( select 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' x from dual ),
suffixes as (
select
rownum r,
substr(x,trunc((rownum-1)/36),1) c1,
substr(x,mod(rownum-1,36),1) c2
from chars
connect by level <= 36*36
),
potentials as
( select substr(:input,1,5) x from dual
union all
select substr(:input,1,4)||c2 from suffixes where rownum <= 36
union all
select substr(:input,1,3)||c1||c2 from suffixes where rownum <= 36*36
)
select *
from potentials
where not exists ( select 1 from emp_table where short_name = potentials.x )
and rownum = 1
with my same caveats about concurrency and the like.