The OpenGL "common mistakes" page is quite awesome for this kind of thing; this link is relevant:
http://www.opengl.org/wiki/Common_Mistakes#Texture_upload_and_pixel_reads.
Summary.
Most GPUs will internally store all textures in BGRA layout, irrespective of what you specify when creating the texture.
What should be obvious from this is (and this applies to the
format param of glTexImage and glTexSubImage calls):
Using GL_RGB for starters is just plain nuts. You're not saving video RAM and when loading the texture your driver must expand it to 4 components and swap R and B.
Using G_BGR avoids the swap but means it must still be expanded.
Using GL_RGBA avoids the expansion but means it must still be swapped.
Using GL_BGRA avoids both the swap and expansion - transferring the data from system memory to GPU memory is just the equivalent of a straight memcpy which can be optimized (the most simple optimization being transferring 32 bits of source data at a time instead of 8 bits). No CPU work required before transferring, data is already in the format the GPU will use internally, result is a much faster transfer.
Of course, once the transfer has completed and the texture is in GPU memory none of this has any impact on performance. But if further transfers must happen during runtime (like e.g. Quake dynamic lightmap updating), then it most certainly does.