But why do you need to access the contents of #5 as index #3?

If it is critical to your logic, then you should probably have a separate array of indexes that you use to indirectly index into your control array.
I do something like that in a number of cases, especially if I'm moving controls or grouping them together in different hierarchies, and adding and removing.
In my case, I don't actually add or remove controls (unless I've run out). When a control is "removed" from the hierarchy, I simply add it to a list (a pool) of available controls and hide it and I remove it from my active list. The Active list is usually a linked list in my case, but you could also just shuffle the index numbers down in your array to "close the gap" of any controls removed from your hierarchical list.

So, for your example you loaded five controls, so they would be indexes 0 to 4 (or if you use 0 as just a template, then possibly 1 to 5 for you active controls).
In any case if you really remove 3, and want to use the index 3 to access control #5, then put the number 5 (or 4 if zero based) in place of where index 3 was in your indirect array.

Much easier to control your own indirect indexes to the control array, than to manipulate the control array indexes directly.