• Pseudocode of my guess!

    Select e.entityId,

    a.name,

    a.title,

    a.address,

    e.rank

    From (

    Select entityId, max(Rank) Rank

    from (

    Select

    Top(50)

    e.entityId

    keyTable.Rank

    From

    entity e

    inner join ContainsTable(srch_param, param_val, @contains_srch_param) as keyTable on e.entityId = keyTable.key

    -- Order by keyTable.Rank desc (probably not needed)

    Union

    Select

    Top(50)

    e.entityId

    keyTable.Rank

    From

    entity e

    inner join FreeTextTable(srch_param, param_val, @freetext_srch_param) as keyTable on e.entityId = keyTable.key

    -- Order by keyTable.Rank desc (probably not needed)

    ) ranking_subquery

    Group by entityId

    ) e

    join

    entity a

    on

    e.entityId = a.entityId

    Order by rank desc, name;

    edit: Forgot a "group by"