The reason it was still taking a long time is because of the re-calculation of the left and right organization ids on the entire tree. The pattern is based on the "nested set" algorithm for encoding nodes in a tree so that you can quickly locate all children.
I've replaced that pattern with one that provides the same feature, but doesn't have the cost of having to re-calculate the entire tree. Plus there is zero cost on deletes or adds. The only cost comes when an org has children. However, unlike the nested set algorithm that causes all adjacent nodes and all descendants of the current and adjacent nodes to require re-calculation, only the current node and all of it's descendant nodes need to be re-calculated.
i.e. When updating a leaf node, only that node needs to be updated. As you go up the tree, only nodes in the subtree need to be updated.