To solve this optimization problem, we need to define variables and constraints based on the given information. Let's denote:

- $c$ as the number of cushioned seats sold.
- $r$ as the number of regular seats sold.

The objective is to maximize profit. The profit made from each cushioned seat is $30, and from each regular seat is $10. Therefore, the total profit can be represented as $30c + 10r$.

Given constraints:
1. The bus has 150 seats in total, so $c + r \leq 150$.
2. At least 50 seats are reserved to be cushioned, so $c \geq 50$.
3. At least twice as many people prefer regular seats over cushioned seats, so $r \geq 2c$.

To ensure that we don't sell more seats than available and considering the constraints, we aim to find the optimal values of $c$ and $r$ that maximize profit under these conditions.

The problem can be formulated as a linear programming problem:

Maximize: $30c + 10r$

Subject to:
- $c + r \leq 150$
- $c \geq 50$
- $r \geq 2c$
- $c, r \geq 0$ (since the number of seats cannot be negative)

Let's now translate this into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
m = Model("Bus_Seat_Optimization")

# Define variables
c = m.addVar(name='cushioned_seats', vtype=GRB.CONTINUOUS, lb=0)
r = m.addVar(name='regular_seats', vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function
m.setObjective(30*c + 10*r, GRB.MAXIMIZE)

# Add constraints
m.addConstr(c + r <= 150, name='total_seats')
m.addConstr(c >= 50, name='min_cushioned_seats')
m.addConstr(r >= 2*c, name='regular_vs_cushioned')

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Cushioned seats: {c.x}")
    print(f"Regular seats: {r.x}")
    print(f"Total profit: ${30*c.x + 10*r.x:.2f}")
else:
    print("No optimal solution found")
```