Думаю, что без разбиения текста на символы обойтись нельзя. Но это довольно просто:
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
	string text = "Some text";
	float x = 0;
	const float wordSpace = 2.3F, charSpace = 1.2F;
		System.Drawing.Graphics gr = this.CreateGraphics();
	Font font = new Font("Arial", 16);
	SolidBrush brush = new SolidBrush(Color.Black);
	CharacterRange[] ranges = new CharacterRange[text.Length];
	for (int i = 0; i < text.Length; i++)
		ranges[i] = new CharacterRange(i, 1);
	StringFormat sf = new StringFormat();
	sf.SetMeasurableCharacterRanges(ranges);
	Region[] regions = gr.MeasureCharacterRanges(text, font, 
		new RectangleF(0, 0, 200, 100), sf);
	
	for (int i = 0; i < text.Length; i++)
	{
		if (char.IsWhiteSpace(text, i))
			x += regions[i].GetBounds(gr).Width * wordSpace;
		else
		{
			gr.DrawString(text.Substring(i, 1), font, brush, x, 0);
			x += regions[i].GetBounds(gr).Width * charSpace;
		}
	}
}