A: Because the sparse-matrix implementation is based on hash-tables indexed by mesh-entities like vertices, lines, ..., and each entry is again a block consisting of a matrix object. This means that generic functions have to be used for handling those entries. Unfortunately, the overhead for hash-table and method lookup is large, especially in the case of scalar equations with low-order discretizations.
A: It is possible to improve it by replacing the data structure by a more efficient array-based one where the operations are also specialized depending on the type of their entries. I have started working on this and preliminary results look promising. The result should be a matrix-vector data structure having most of the flexibility of the current approach while being as efficient as the usual CRS scheme.