MST_PLANAR and MST_TRIANGLE_SOUP drawsurfaces are indexed triangles. There is a vertex list and an index list. The indexes are discrete triangles, 3 4-byte integers per triangle that reference into the vertex list.
Brush faces, lightmapped surfaces, patchmeta surfaces, terrain all map to MST_PLANAR internally because Quake 3 only supports lightmaps on MST_PLANAR type surfaces. They have a limit of 64 verts internally, but that can be overridden with the -mv N (max vertexes) and -mi (max indexes (triangles x3)) arguments.
The only functional difference between MST_PLANAR and MST_TRIANGLE_SOUP in a BSP compiled with Q3Map2 are the lightmaps/vertex count.
lightmapVecs[ 2 ] will be a non-zero-length normal vector if the entire surface lies in a plane, so you can do dotproduct backface culling of an entire surface.
y