A lot of changes required to achieve this, You have to customize SXA components, commerce engine connect layer and commerce engine with a custom plugin.
Do following changes in SXA components.
1. Create custom AccountManager class, inherit it from existing AccountManager and add your custom RegisterUser method with parameters you need.
2. Your custom method code will be same as existing RegisterUser method except while creating the CreateUserRequest object add the custom data (e.g. ReceiveEmailAlert) to Properties collection of CreateUserRequest instance.
3. In Sitecore Service collection (in configuration) replace the existing AccountManager registration with your custom account manager implementation.
4. Create custom AccountController, inherit from existing AccountController.
5. Add your custom Registration methods in the controller. Use existing registration methods code and change the method name.
6. In Post method implementation, type cast the account manager to your custom account manager type and call your custom RegisterUser method.
7. In Sitecore Service collection (in configuration) replace the existing AccountController registration with your custom account controller implementation.
8. Duplicate the existing Registration rendering in Sitecore and change the controller name to your custom account controller, also change the method name to your custom registration method.
9. Copy the existing registration view and create the custom view, do the changes in the custom view as per above controller and method changes.
10. Replace the existing registration rendering with custom registration rendering in your registration page presentation.
Do following changes in Commerce Engine Connect layer.
1. Create a pipeline processor for "commerce.customers.createUser" pipeline.
2. Use existing code from "Sitecore.Commerce.Engine.Connect.Pipelines.Customers.CreateUser, Sitecore.Commerce.Engine.Connect".
3. Using "args.Request" get your custom data from properties collection.
4. Assume that you have properties in your entityView.Properties collection with name "ReceiveEmailAlert" and "ReceiveMobileAlert", get those properties and set the values, follow the code for setting the email property. (you have to add these properties by custom plugin in commerce engine)
5. Replace the existing CreatUser pipeline processor with your custom CreateUser pipeline processor implementation.
Create a custom plugin that will enhance the functionality of existing "Sitecore.Commerce.Plugin.Customers" plugin in commerce engine.
Following blocks should be replaced with your custom implementation:
1. GetCustomerDetailsViewBlock - This will be called from CreateUser pipeline processor. You have to write code to add your custom properties in EntityView for "AddCustomer" and "EditCustomer" actions.
2. TranslateEntityViewToCustomerBlock - This will be called by CreateUser pipeline processor to save customer details, You need to write code to get custom property values from EntityView and fill in the customer entity, (You can store your custom values in a separate component class and add it to components list of customer entity.)
3. UpdateCustomerDetailsBlock - This block is to update the existing customer details.
4. Custom plugin should replace following blocks in commerce engine:
4.1 Replace existing "GetCustomerDetailsViewBlock" in the "IGetEntityViewPipeline" with your custom "GetCustomerDetailsViewBlock".
4.2 Replace existing "TranslateEntityViewToCustomerBlock" in the "ITranslateEntityViewToCustomerPipeline" with your custom "TranslateEntityViewToCustomerBlock".
4.3 Replace existing "UpdateCustomerDetailsBlock" in the "IUpdateCustomerDetailsPipeline" with your custom "UpdateCustomerDetailsBlock".
Hope this will help.