Not in this particular case (ie, wanting to bulk collect but nominate one of the values as the array *index*).
But you can do this in 18c, where you nominate at assignment time the index you want to use
SQL> declare
2 type rec is record ( x int, y int, z int );
3 type reclist is table of rec index by pls_integer;
4 r reclist;
5 begin
6 r := reclist(
7 1=>rec(1,2,3),
8 5=>rec(4,5,6),
9 7=>rec(7,8,9)
10 );
11 end;
12 /
PL/SQL procedure successfully completed.