I checked with Keil uV2 and found, that the generated code for your original text is already near to optimal, particularly by using register variables where ever possible. The only point, that could be improved is not recalulating the index and loading DPTR for each access to Signals. This can be basically improved by using a single pointer that is decremented or incremented.
Generally, you have to inspect the assembly listing and consider, what the compiler is doing and why? Apparently, you didn't yet.
To access the actual array memory space, indexArray has to be decremented at begin of the loop, by the way, e.g. while(indexArray--), otherwise you're reading out of bounds.