Why not just keep it simple:

Publish(this IBus bus, Type messageType, object message)
{
    // call bus.Publish<T>(message);
}

Publish(this IBus bus, Type messageType, object message, string topic)
{
    // bus.Publish<T>(message, topic);
}

And similar for PublishAsync?