I recommend you to familiarize yourself with this link: http://docs.oracle.com/cd/E16655_01/server.121/e15858/tgsql_optop.htm#CHDFJIJA
It is Oracle 12c related, however it is very usefull to gain understanding how oracle uses different index access pathes in all DBMS versions.
Your subquery is ambigous:
select max(create_dt) from test_A where test_A.id2=id2
both test_A.id2 and id2 references to the same test_A.id2, and the query is equivalent to this:
select * from test_A where id2=123 and
create_dt=(select max(create_dt) from test_A where id2=id2);
or simply:
select * from test_A where id2=123 and
create_dt=(select max(create_dt) from test_A where id2 is not null);
I suppose that you want something like this:
select * from test_A where id2=123 and
create_dt=(select max(create_dt)
from test_A ALIAS
where test_A.id2=ALIAS.id2);
For the above query a composite index on id2+create_dt most likely give the best results, try it:
CREATE INDEX index_name ON test_A( id2, create_dt);