To solve this problem, we first need to define the variables and the objective function. Let's denote the number of bear plush toys as \(B\) and the number of dog plush toys as \(D\). The profit per bear is $4, and the profit per dog is $5. Therefore, the total profit can be represented as \(4B + 5D\).

The constraints are:
1. Time constraint: Each bear takes 15 minutes to make, and each dog takes 12 minutes to make. The company has 1000 minutes available. This can be represented as \(15B + 12D \leq 1000\).
2. Production ratio constraint: The company must make at least two times as many bears as dogs, which can be represented as \(B \geq 2D\).

Both \(B\) and \(D\) should be non-negative since they represent the number of plush toys.

The goal is to maximize the profit function \(4B + 5D\) under these constraints.

Here's how we translate this into Gurobi code in Python:

```python
from gurobipy import *

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

# Define variables
B = m.addVar(name="bears", vtype=GRB.INTEGER, lb=0)  # Number of bear plush toys
D = m.addVar(name="dogs", vtype=GRB.INTEGER, lb=0)   # Number of dog plush toys

# Set the objective function: Maximize profit
m.setObjective(4*B + 5*D, GRB.MAXIMIZE)

# Add constraints
m.addConstr(15*B + 12*D <= 1000, name="time_constraint")  # Time constraint
m.addConstr(B >= 2*D, name="production_ratio")            # Production ratio constraint

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Bears: {B.x}")
    print(f"Dogs: {D.x}")
    print(f"Maximum Profit: ${4*B.x + 5*D.x}")
else:
    print("No optimal solution found")

```