A Microsoft online analytical data engine used in decision support and business analytics, providing the analytical data for business reports and client applications such as Power BI, Excel, Reporting Services reports, and other data visualization tools.
In MDX blanks are equal to 0 so checking for =0 will also overwrite blanks. You should explicitly check for non-empty by doing something like the following in your assignment.
THIS=IIF( NOT( ISEMPTY( [Measures].[Budget Amount 2 - EDIT] ) ) ,0.000000000000001,[Measures].[Budget Amount 2 - EDIT]);
Although this is still likely to be slow as you are crossjoining the leaves of 5 dimensions and forcing the engine to re-aggregate on the fly. So if you can - you would be better off implementing this in your ETL or in your views/DSV and taking it out of the calc script. This also feels like its a work around for some other issue, so maybe looking for an alternate solution for that would be better.