The GPU really doesn’t care, whether you have ints / floats or whatever at the end of an array, where it doesn’t read it anyway. They do not need to be the same size, at all. You can for example but 3 byte colors into such an array and it will work, too (though horribly slow, because 3 bytes breaks any alignment).
The more interesting part is, that you use that array as an element array, and therefore bind it to index 0. I would suspect, that you are in a grey area here, because some drivers might simply expect, that in this case your index buffer is in main memory, not in a VBO and therefore most certainly on the GPU. This might lead some drivers to the idea to first copy that buffer into GPU memory for faster access. Whether this in turn might give you bad performance or even crashes, i don’t know, but it is certainly an unnecessary risk to take.
The question is, how do you give it the correct offset ? glDrawElements expects a pointer, when bound to 0, but an offset, when bound to a VBO. If you simply give it the same offset as if ELEMENT_ARRAY was bound to a VBO it should not work, at all. However, you can’t really give it a pointer, because you don’t have one, unless you map it, but this pointer is not guaranteed to stay constant over time.
I would say this is indeed a very bad idea and i am wondering why you did that in the first place. What advantage do you get/expect from putting both data into the same array?