using (IDisposable) in c# factory pattern
No, you can't use a factory to dispose your objects, your code is creating and immediately disposing the SPSite  as soon as it steps out of your method.  

public override SPSite GetSite(string url = null)
{
    return new SPSite(string.IsNullOrEmpty(url) ? Url : url))
}


Have the disposing be handled by the calling code. You can't handle the disposing from a factory method.

If you want to check it out, build your own disposable type, put a breakpoint in the Dispose method and check for yourself.