You can change the displayedColumns of *matRowDef="let row; columns: displayedColumns;"> dynamically and the table will re-render.
Just add a formControl to your mat-selection-list make your displayedColumns the value of it.
<mat-selection-list [formControl]="columnFormControl">
<mat-list-option *ngFor="let column of ruleGroupColumns" [value]="column"></mat-list-option>
</mat-selection-list>
ruleGroupColumns: string[] = [
'MERGE',
'FACILITY',
'COMPANY'
];
columnFormControl = new FormControl(this.ruleGroupColumns);
get displayColumns() {
return this.columnFormControl.value;
}