Are there actually cards that don't?
I'm not sure by now (it was long time ago when I touched this), but IIRC NVIDIA Riva128 or TNT (or probably another vendor) has some "specific behaviour" due to driver emulating D3DRS_DIFFUSEMATERIALSOURCE, D3DRS_SPECULARMATERIALSOURCE.

By COLOR2 I meant putting two colors in vertex format and later in texture stages setup use D3DTA_SPECULAR to reference COLOR2 (and DIFFUSE to reference your material color+alpha). At least in theory it should work. Or you can try to use single color in vertex format and try to use Specular part of material (redefinable by D3DRS_SPECULARMATERIALSOURCE) and reference by D3DTA_SPECULAR in texture stage setup to it.

Constant TFACTOR per DrawPrimitive is really easier way, but beware it was reported what some drivers have broken it's implementations (probably really old drivers). Another options is to use 1x1 texture and fill it with needed color (but you need to have spare texture unit available for that...)