By creating and destroying objects, while it doesn't create overhead, it's inefficient. If I'm understanding your question right you want to have a button that changes from a 1 ps bought to a 5 ps bought.
In which case, you can just draw the text on top of the button sprite and change it when the button is clicked.
Drawing
draw_text(x, y, text);
/* Where text is the variable you change when the button is clicked
and x/y are the position of the text on the button */
script_execute(effectApplied);
/* This being an object var with the data of the script to run */
Then whenever the button is clicked
text = "Add 5/ps - $500"; // Set the new button text
effectApplied = newScriptToRun; // Set the new Script to run
This, in my opinion, is the best way of performing this. If you want the button sprite to change then you can just have each of the button images be included as subimages in a single Game Maker Sprite and just change the sprite_index
to the new sprite then change the effectApplied
script var.