Я, честно говоря, понятия не имею, будет ли это работать, но попробуйте:
bottomRightTable.Attributes["dir"] = "RTL"; // Set the table to "right-to-left"
Теоретически, в правом столбце должно быть 0, в среднем столбце 1 и в левом столбце 2 .... так что вам придется изменить любую другую логику.
http://www.w3.org/TR/html4/struct/tables.html#h-11.2.1.1
Ваш алгоритм использует ColumnSpan, но ничего не делает. Это потому, что он устанавливает для ColumnSpan одинаковое значение для каждой ячейки в столбце. то есть:
<table>
<tr>
<td colspan="3" style="..."></td>
<td colspan="2" style="..."></td>
<td style="..."></td>
</tr>
<tr>
<td colspan="3" style="..."></td>
<td colspan="2" style="..."></td>
</tr>
<tr>
<td colspan="3" style="..."></td>
</tr>
</table>
Если вы попытаетесь исправить алгоритм ColumnSpan, вы получите:
<table>
<tr>
<td style="..."></td>
<td style="..."></td>
<td style="..."></td>
</tr>
<tr>
<td colspan="2" style="..."></td>
<td style="..."></td>
</tr>
<tr>
<td colspan="3" style="..."></td>
</tr>
</table>
Так что, в принципе, я думаю, что вам нужно либо использовать взлом справа налево, либо использовать пустые ячейки.