Just a heads up, "indexed colour" actually has a completely different meaning from what you are implying here. At first, I thought you were actually using indexed colors instead of RGB[A]. What you are doing here is drawing vertices (with color) using an element array buffer, which you refer to as indices. It may sound pedantic, especially since almost nobody uses index color modes these days, but it definitely caught me off guard initially.
As for the actual question, I have spent some time looking over your code and I think you are under the impression that OpenGL uses a separate element buffer to index each type of vertex attribute.
This is not the case, while you can use multiple VBOs to store each vertex attribute, they function as if they were one single array of structured data. That is, you cannot do something like select vertex position #0, vertex color #4 and vertex normal #2 by using separate element arrays. You have a single element array and it always pulls each vertex attribute from the same index.
Unfortunately, the behavior discussed above means that when you have vertices that share some, but not all, attributes you wind up having to make two discrete vertices. More importantly, it means that your color array should have the same length as your position array and you only use a single index array to draw using both.