If you wanted to "force" Oracle you use joins, you could phrase the query as:
SELECT a.a1,
(select c.c1 from TableC c where b.B_ID = c.FB_ID) as c1,
(select c.c2 from TableC c where b.B_ID = c.FB_ID) as c2,
(select d.d1 from TableD d where b.B_ID = d.FB_ID) as d1,
(select e.e1 from TableE e where b.B_ID = e.FB_ID) as e1,
(select e.e2 from TableE e where b.B_ID = e.FB_ID) as e2,
(select e.e3 from TableE e where b.B_ID = e.FB_ID) as e3
FROM TableA a JOIN
TableB b
ON a.A_ID = b.AF_ID;
This formulation might make it more clear how the indexes get used. (And, this assumes that there is at least one match in each of the optional tables.)