This is not an answer, but, based on chuy's solution, I want to show someone of the advantages of the new V10 Inactive
:
(x = Inner[Inactive[Times],
{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}},
Inactive[Plus]]) // MatrixForm
Activate[x, Times] // MatrixForm
Activate[x] // MatrixForm