You may try:
(.*?)(ND_\d_)(Dist_\d_)(.*)
Explanation of the above regex:
(.*?) - Represents first capturing group lazily matching everything before ND.
(ND_\d_) - Represents second cpaturing group matching ND_ followed by a digit. You can alter if digits are more than one like \d+.
(Dist_\d_) - Represents third capturing group matching Dist_ literally followed by a digit.
(.*) - Represents fourth capturing group matching everything after greedily.
$1$3$2$4 - For the replacement part swap groups $3 and $2 to get your required result.

You can find the demo of the above regex in here.
Powershell Command for renaming the files:
PS C:\Path\To\MyDesktop\Where\Files\Are\Present> Get-ChildItem -Path . -Filter *.txt | Foreach-Object {
>> $_ | Rename-Item -NewName ( $_.Name -Replace '(.*?)(ND_\d_)(Dist_\d_)(.*)', '$1$3$2$4' )
>> }
Explanation of the above command:
1. Get-ChildItem - The Get-ChildItem cmdlet gets the items in one or more specified locations
2. -Path . - Represents a flag option for checking in present working directory.
3. -Filter *.txt - Represents another flag option which filters all the .txt files in present working directory.
4. Foreach-Object - Iterate over objects which we got from the above command.
4.1. Rename-Item -NewName - Rename each item
4.2. $_.Name -Replace - Replace the name of each item containing regex pattern with the replacement pattern.
5. end of loop