The possibility for empty slices complicate the situation, and throw a bit of a spanner in the works. 
The worst case is indexed writes to potentially empty slices, I guess, but I’m thinking that indexed reads and writes could be treated differently.
If there is a way to speed up indexed reads only, but not writes, then that would still seem pretty worthwhile.
But indexed reads from potentially empty slices is still a tricky case.
Maybe it would be possible to require all arrays to hold an extra sentinel value, and then just read off the end of the slice. (Messier, but can still provide meaningful memory safety guarantees.)
In some situations it would be ok to read from some global zero filled memory space, I guess, since, in some situations, zero filled memory can work as valid default object initialisation. (I’m thinking about C# structs, for example.)
I don’t know enough about rust, to know whether any of this is actually workable, though…