In your Merchant domain class you can add the following method to intercept an update event and if the email property has changed update the corresponding username. Off the top of my head it will look something like this:
def beforeUpdate() {
if (this.getDirtyPropertyNames().contains('email')) {
this.login.username = this.email
}
}
You can find out more information about GORM events and their hooks in the documentation.