Create a model to hold what error information you want to return and pass that.
public IHttpActionResult Save(item) {
    try {
        result = MyRepository.Save(item);
        return Ok(result);
    } catch {
        // What should I do here? Create a model to hold the data you want to return
        var myErrorModel = new {
            code = "My custom error code or 500 server error code",
            message = "some friendly error message"
        };
        // I wish to return an error response how can i do that?
        var response = Request.CreateResponse(HttpStatusCode.InternalServerError, myErrorModel);
        return ResponseMessage(response);
    }
}
In your javascript client in the error handler you can then access the model properties and handle the error as you see fit.
var handleResponse = function (data) {
    var code = data.code;
    var message = data.message
};
UPDATE:
Agreeing with @Win, I personally don't like doing this in the controller actions as it is a Cross-cutting concern and have basically moved everything from within the catch block into a global error handler.