No, it is not possible to have just one resource block using multiple providers. The best way to do is to have different folders for different accounts in organisation. Each folder having its main.tf with the same resource block/s (as in your case), and different provider.tf. Inside your main you can call the required modules.
For your case, it might seem as a lot of redundant code but this is the best option. Refer the project structure below to get an idea.
| Project Directory
|
+---dev
| | main.tf
| | param.tfvars
| | provider.tf
| | terraform.tfstate
| | terraform.tfstate.backup
| | variables.tf
| |
+---modules
| +---internetgateway
| | main.tf
| | outputs.tf
| | variables.tf
| |
| +---nat
| | main.tf
| | outputs.tf
| | variables.tf
| |
+---prod
| | main.tf
| | param.tfvars
| | provider.tf
| | terraform.tfstate
| | terraform.tfstate.backup
| | variables.tf
| |
+---test
| | main.tf
| | param.tfvars
| | provider.tf
| | terraform.tfstate
| | terraform.tfstate.backup
| | variables.tf