Some refinements for you on the .mesh format:
Everywhere there is a stringLength, it looks to be a long, not a char as your doc currently indicates.
Textures look to be always composed of 3 DDS textures, as described by Major Stress
here.
The long you have listed as Unknown2 in the file header (at address 0x21) looks to be a count of textures. Then each texture is 3 Unicode strings, then 18 floats. These 18 floats are associated with the texture, not with the emitters that follow the texture list. I've been looking at CapitalShip_TechBattleship.mesh, which uses two textures, EffectTechActurret-*.dds and CapitalTechBattleship-*.dds, and there is a set of 18 floats separating the two sets of filenames, in addition to following the second set of filenames.
In other notes, I see emitters up to Ability-4 for the Kol, which is odd, because the capital ship entities only support 4 abilities (0,1,2,3). It may be a leftover artifact, currently unused.
Blair,
I've been using XVI32, for no reason than because it's the first hit when Googling for "hex editor".

It has some handy features, like the ability to search for a Unicode string, and to interpret a set of 4 bytes as an IEEE float in realtime. I haven't felt the need to look for another one yet, at least.