Disclaimer: I've never actually tried this myself. But looking at the code you're using, there are two base conditions for the conditions you're dealing with. And based on your own statement; it works when you use one of these - you just want to get rid of having to define an operator for your condition.
public abstract class TypedQueryableOperatorCondition<T, TItem> : OperatorCondition<T>, IQueryableRule<TItem> where T : QueryableRuleContext<TItem> where TItem : IObjectIndexers
and
public abstract class TypedQueryableStringOperatorCondition<T, TItem> : StringOperatorCondition<T>, IQueryableRule<TItem> where T : QueryableRuleContext<TItem> where TItem : IObjectIndexers
Both of these are operator based. Now - based on previous experience (and this is where I'm guessing, in fact) - Sitecore will only spawn your Conditions if the class satisfies a certain signature. And given both of the above are operator conditions, none of them will do what you want.
My proposal would be to create another base class:
public abstract class TypedQueryableWhenCondition<T, TItem> : WhenCondition<T>, IQueryableRule<TItem> where T : QueryableRuleContext<TItem> where TItem : IObjectIndexers
And then your concrete class like:
public class ContactPropertyCondition<T> : TypedQueryableWhenCondition<T, IndexedContact> where T : VisitorRuleContext<IndexedContact>
This should give you the required method signature and with any luck, Sitecore will instantiate it for you.