Ernesto,
I think what you want is to do something like this:
Block[{x},
TraditionalForm@
TextCell[
Column[{Row[{ToString[x, TraditionalForm], " = ",
5}] (*I want x to always be a symbol*)}, Spacings -> 0.5],
"Text", FontFamily -> "Palatino", FontSize -> 18]]
You can see what the problem is by looking at the FullForm of your expression returned from the Block:
blk = Block[{x},
TraditionalForm@
TextCell[
Column[{Row[{x, " = ",
5}] (*I want x to always be a symbol*)}, Spacings -> 0.5],
"Text", FontFamily -> "Palatino", FontSize -> 18]];
blk // FullForm
The Block clears the local value of x so it can be used as a symbol or reassigned locally as you want to do. However, after it is returned to the front end, it still has the variable form of x inside. This causes Mathematica to reevaluate it in the global context and substitute the value for x. The way to fix this is to "lock down" the symbol x so it doesn't get reevaluated. Since you only seem to want a string in the end that has the traditional form of the variable, I would use the local value of x (a symbol) and convert it to a string in traditional form. At this point it will no longer be reevaluated.
I hope this helps,
Neil