Use a vec4 and a vec2. You can make two calls to glVertexAttribPointer to feed a float[6] from the CPU-side as a vec4 and vec2 in the shader.
void glVertexAttribPointer(vec4_index,
4,
GL_FLOAT,
false,
vertex_size,
&(my_vertex.faceTextureOffsets[0]));
void glVertexAttribPointer(vec2_index,
2,
GL_FLOAT,
false,
vertex_size,
&(my_vertex.faceTextureOffsets[4]));
Short for-loops in shaders are usually unrolled and functions inlined by the shader compiler so you can replace an iteration of for(int i=0; i < 6; ++i){ my_code... }
with a function called 6 times as for example:
ProcessSide(0, faceTextureOffsets4.x);
ProcessSide(1, faceTextureOffsets4.y);
ProcessSide(2, faceTextureOffsets4.z);
ProcessSide(3, faceTextureOffsets4.w);
ProcessSide(4, faceTextureOffsets2.x);
ProcessSide(5, faceTextureOffsets2.y);
And there should be no performance penalty. (Depend on the GPU drivers but most do inline functions and unroll loops.)