Obviously the only solution is splitting text line to words and layout words across the column (as Jeff Yates suggests above). First thing is verifying the idea using Grid container:
<Grid Name="grid1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Left" Text="This" Grid.Column="0" />
<TextBlock HorizontalAlignment="Center" Text="is" Grid.Column="2" />
<TextBlock HorizontalAlignment="Center" Text="someprettylongpiece" Grid.Column="4" />
<TextBlock HorizontalAlignment="Right" Text="text" Grid.Column="6" />
</Grid>
Next step is creating custom panel that performs text blocks layout without dealing with Grid:
<JustifiedPanel>
<TextBlock Text="This"/>
<TextBlock Text="is"/>
<TextBlock Text="a"/>
<TextBlock Text="justified"/>
<TextBlock Text="line"/>
<TextBlock Text="of"/>
<TextBlock Text="text"/>
<TextBlock Text="that"/>
<TextBlock Text="demonstrates"/>
<TextBlock Text="feasibility"/>
</JustifiedPanel>
(Sample source code is available on my blog)
Finally I'm going to create JustifiedTextBlock control which will split text onto words and layout them. Nontrivial things here are proper RTL support and correct line splitting.