There are three forms of the Kalman filter. You might consider using another form,

There's the covariance form, which you are using. This requires a matrix inversion at each step, but gives you the state estimate directly. This is the form most people know.

There's also an *information form*, which works with the inverse of the covariance matrix (called the *(Fisher) information matrix*). This does *not* require a matrix inversion at each step -- but the state estimate is not directly accessible. Instead of a state estimate, you have an *information vector.* You can reconstruct the state estimate from the information vector, but this requires a matrix inverse. One nice thing about this form is that you can specify a totally noninformative prior for the state by setting the initial information matrix to zero. Also, there are reasonable assumptions under which information matrices are sparse (but covariance matrices are not), so this form can sometimes be efficient for really large problems with sparsity.

Finally, there's the *square root form*. Here, instead of working with either the covariance or its inverse, you work with a matrix square root of the covariance matrix (e.g., its Cholesky decomposition), and actually never construct the covariance matrix directly. ~~This is usually the most computationally efficient filter.~~ [EDIT: Actually, it's the most expensive; what it *is* is numerically stable.] It also avoid the problems of ensuring that your covariance or information matrix remain positive definite in the face of roundoff errors, since it's impossible to represent anything *but* positive definite matrices this way [EDIT: this is largely the point of this form].