Yes,it would be difficult to switch those fields. It is not a single page you are dealing with, it is several.
I don't understand what you mean by "people order personalization options without paying for them". If the personalization is an option, then you can put a price change on it so that when the customer chooses that option, the price will change accordingly.
I am no JavaScript wizard but you should be able to do the following....
1. Show the default price (Our Price) with no options included in featured products, products list, and individual product page. X-cart does this by default as long as "no options" is the first product option listed (usually at the top of the list).
2. Ask the customer if they want a customized option. Default should be "no". If they choose change that option to "yes", x-cart will change the default price (Our Price) by adding in whatever you stipulate as the price of the option to the price (Our Price) and displaying it to the customer.
3. Here is where the extra JavaScript comes in (and there is a place to enter it in your product options that should work). If the customer changes the option from "no" to "yes" then open the form where they enter the optional text they want. If the customer doesn't change the default "no" then they don't even see the text field. This would be really cool, and avoid the situation where customers enter their message and don't want to pay for it.
The JavaScript necessary would be similar to what is used in the example used at
http://www.dynamicdrive.com/dynamicindex16/formdependency.htm or maybe the one at
http://www.dynamicdrive.com/dynamicindex16/chainedselects/index.htm.
As I said, I'm no JavaScript expert but I think this should be able to be done.
I would shy away from making any "hard coded" changes to what x-cart displays as it could make it nearly impossible to add another product without the same options, and difficult to upgrade x-cart as well.