Create a flag that says do not override this spell does not change much code.
In that regard, I also think a game by game, user by user do not cast list is a good idea, and does not involve a lot of code. (create, maintain, load, save and use the list probably takes less than 100 line of actual code) That would make save game incompatible with previous versions, but that happened a few times already.
