Your query is crossjoining the measures together: [Measures].[Costs] * [Measures].[Margin]
but your idea for the expected results is different. What you show in your expected result is a crossjoin of two sets: {Articles} * {Measures}
I suggest something more like this:
SELECT
{[Measures].[Costs], [Measures].[Margin]} ON COLUMNS,
NON EMPTY {[Art].[Art].[Art].ALLMEMBERS} ON ROWS
FROM [Model]
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
Or if you want it all on the columns, like your expected result:
SELECT
NON EMPTY {[Art].[Art].[Art].ALLMEMBERS} *
{[Measures].[Costs], [Measures].[Margin]} ON COLUMNS
FROM [Model]
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
For learning about MDX, I recommend the book "MDX Solutions" as a gentle introduction.